十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1、反射可以在运行时 动态获取变量的各种信息 ,比如变量的类型、类别;
创新互联于2013年开始,先为湘西土家族等服务建站,湘西土家族等地企业,进行企业商务咨询服务。为湘西土家族企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2、如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法);
3、通过反射,可以修改 变量的值 ,可以调用关联的方法;
4、使用反射,需要import " reflect ".
5、示意图:
1、不知道接口调用哪个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。
例如以下这种桥接模式:
示例第一个参数funcPtr以接口的形式传入函数指针,函数参数args以可变参数的形式传入,bridge函数中可以用反射来动态执行funcPtr函数。
1、reflect.TypeOf(变量名),获取变量的类型,返回reflect.Type类型。
2、reflect.ValueOf(变量名),获取变量的值,返回reflect.Value类型reflect.Value是一个结构体类型。
3、变量、interface{}和reflect.Value是可以互相转换的,这点在实际开发中,会经常使用到。
1、reflect.Value.Kind,获取变量的 类别(Kind) ,返回的是一个 常量 。在go语言文档中:
示例如下所示:
输出如下:
Kind的范畴要比Type大。比如有Student和Consumer两个结构体,他们的 Type 分别是 Student 和 Consumer ,但是它们的 Kind 都是 struct 。
2、Type是类型,Kind是类别,Type和Kind可能是相同的,也可能是不同的。
3、通过反射可以在让 变量 在 interface{} 和 Reflect.Value 之间相互转换,这点在前面画过示意图。
4、使用反射的方式来获取变量的值(并返回对应的类型),要求数据类型匹配,比如x是int,那么久应该使用reflect.Value(x).Int(),而不能使用其它的,否则报panic。
如果是x是float类型的话,也是要用reflect.Value(x).Float()。但是如果是struct类型的话,由于type并不确定,所以没有相应的方法,只能 断言。
5、通过反射的来修改变量,注意当使用SetXxx方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到reflect.Value.Elem()方法。
输出num=20,即成功使用反射来修改传进来变量的值。
6、reflect.Value.Elem()应该如何理解?
你可以先去【绘学霸】网站找“动画制作技术”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: ;tagid=310zdhhr-11y04r-17474961
想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。
自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】:
在“动画制作技术”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。
大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载:
编程语言的分类:共分为两大类。
第一类是汇编语言,汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。
另一类是高级语言,高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,大大简化了程序中的指令。同时由于省略了很多细节,编程者也就不需要有太多的专业知识。
当我们想要激励部落成员,提高社区吸引力时,我们不应该使用恐惧法,相反我们应该使用自豪法。当使用恐惧法激励时,比如说这样的话:“如果我们不解决问题 X,那么 Python 开发者将会减少,他们将会转而去使用语言 Y”,那么我们就在故意地向全世界自由贡献代码的人传递负能量。但如果我们使用自豪法,说出来的话将是这样的:“Python 中的问题 X 的确难以解决,看看语言 Y 的社区,他们用一个极好的方法解决了这个问题,我们也可以在 Python 中尝试这个解决方案,以同样优雅的方式解决 Python 中的问题”。积极地强调“以我们自己的努力为自豪”,有利于促进 Python 社区中不断学习的文化,还会不断促进与其他社区关系的发展。
动画动画的英文Animation源自于拉丁文字根的anima,意思为灵魂,动词animare是赋予生命,引申为使某物活起来的意思,所以animation可以解释为经由创作者的安排,使原本不具生命的东西像获得生命一般地活动。
动画制作过程:
1.编写剧本与绘制黑白稿
2.绘制画的连续动作
3.叠合人物与背景
4.上色
5.一张张拍摄
6.拍摄胶片
经过最后的检察,大家喜爱的动画影片就完成了!
动画所指的是由许多帧静止的画面,以一定的速度(如每秒16张)连续播放时,肉眼因视觉残象产生错觉,而误以为画面活动的作品。为了得到活动的画面,每个画面之间都会有些微的改变。而画面的制作方式,最常见的是手绘在纸张或赛璐珞片(Celluloid)上,其它的方式还包含了黏土、模型、纸偶、沙画等。由于电脑科技的进步,现在也有许多利用电脑动画软件,直接在电脑上绘制出来的动画,或者是在动画制作过程中使用电脑进行加工的方式,这些都已经大量运用在商业动画的制作中。
通常动画是由大量密集和乏味的劳动产生,就算在电脑动画科技得到长足进步和发展的现在也是如此。
GIF是一种允许在电脑上看到动画效果的图片格式。现在网络上常用的一种动画格式被称为Flash,由Macromedia公司创造,通过此格式,可以让你在互联网上看动画。
动画的来源
从人类文明开始以来,人类就已经使用各种图像形式来记录物体动作和时间的过程。
法国考古学家普度欧马(Prudhommeau)在1962年的研究报告指出,两万五千年前的石器时代洞穴上就画有一系列的野牛奔跑分析图,是人类试图用笔(或石块)捕捉凝结动作的最早证据。同样的例子,出现在如埃及墓画、希腊古瓶上的连续动作分解图。在一张图画上把不同时间发生的动作画在一起,这种“同时进行”的概念间接显示了人类“动”的欲望。列奥纳多·达·芬奇有名的黄金比例人体几何图上所绘的四只胳膊,就表示双手上下摆动的动作。十六世纪的西方更首度出现手翻书的雏形,这和动画的概念也有相通之处。
中国的绘画史上,艺术家一向有把静态的绘画赋予生命的传统,如“六法论”中主张的气韵生动、聊斋的“画中仙”中人物走出卷轴等,大抵上是靠想像力来弥补动态。真正发展出使图上画像动起来的工夫,还是在遥远的欧洲。
动画的制作
动画制作是一个非常繁琐而吃重的工作,分工极为细致。通常分为制前、制作、制后等。制前又包括了企划、作品设定、资金募集等;制作包括了分镜、原画、动画、上色、背景作画、摄影、配音、录音等;制后包括合成、剪接、试映等。
TV版:就是在电视上放的动画版本
OVA:Original Video Anime(原创影象动画),和TV相对,不在电视上放映,要看的话只能通过购买的方式。具体内容以后会作介绍。
剧场版:动画的电影版本。
*音乐:
OST:Original Sound Track(原创音乐专集)。收录与某动画有关的音乐。
OP:片头曲/主题曲
ED:片尾曲
*片头和片尾的部分字幕解释:
监督:等于中国人说的“导演”
脚本:写剧本的人,也叫故事构成
原作:这个要区别于“脚本”。日本的TV动画通常是由漫画,小说或者游戏……等改编的,漫画作者和动画的制作者通常是不同的(当然也有例外,比如宫崎骏的一些作品,GAINAX也经常是自己的原作自己制作成动画),因此有“原作”这一词。它指的就是原漫画/小说的作者。比如COWBOY BEBOP,原作是“矢立肇”。(关于矢立肇,看过梦总的朋友应该知道这个典故了,但目前看来还有很多人不知道,日后我会再作介绍)
CAST:声优,配音演员
STAFF:参与制作改动画的全体成员(一般的小虾小米都会包括进去)
制作:通常是指负责画该动画的公司,因为日本要制作一部动画通常是要N个部门/公司共同合作完成的,分工明确,有点像流水线操作。这个词也是需要大家关注的,一部动画的制作水准往往会受到制作单位的影响。有时甚至看看动画公司的名字也能知道这部片子值不值得收藏。
*圈内术语这个没有做仔细调查,似乎是只有国内发烧友中通用的词语)
OTAKU:日语,原意为“御宅”。目前国内公认的意义是:容易沉浸在幻想世界中,欠缺正常社交生活经验的次文化族群,说的通俗点就是对动漫有着疯狂热情的一群人,举个例子(只能简单地提一下):
比如EVA的OTAKU能背得出每个使徒的中文,日文,英文名字,详细研究过《新约》《旧约》,熟悉犹太教,基督教和天主教的区别。关注GAINAX的一切活动……精通佛罗依得的理论……是邪教组织的成员……
王道:最近非常流行的一个词语。意思是“权威”,“真理”,“本尊”,“最重要的东西”。有套漫画就叫“王道之狗”。讲的似乎是和孙中山有关的事情~。 恩……现在的社会,什么才是王道呢……?对于本站来说,也许目前的王道是……金钱。(实在是需要啊~~)
暴走:狂飙。GO MAD。症状通常是眼睛变色,行走呈爬行状。有时口冒白色气体……这要视情况而定。
典型角色……EVA初号机……(众人:不要偏袒某人啊~ 月:那个……今天天气真好~)对了,如果遇上类似状况请迅速离开现场或者准备200个灭火器以防不测……
BT:变态的缩写
BL:BOY’S LOVE,男同性恋
GL:GIRL’S LOVE
LOLI(罗丽):日语“幼女”的意思,指12岁以下的小女孩。LOLI也可以作为形容词使用,LOLI的标准在个人眼里可以有所不同,如果看上去觉得很小很可爱的就可以称她为LOLI,最典型的就是小叽了。
正太:和罗丽相同属性的词,专指12岁以下的小弟弟。
PK:原为“扑街”,看字面也知道什么意思了吧。本来指一种黑社会的仪式(扑倒在街上?),现在多为打架的意思。
残念:可惜的意思。引申词语有“碎碎念”……类似的自己也可以造。
收声:闭嘴。
XD:这个很需要大家的想象力哦~第一种解释:X代表M。下面不用我说了吧。 第二种解释:一个表情符号。个人理解是“倒”或“晕”的意思。
口胡:语气词。相当于“靠!”之类的泄愤词语。也可以写成“口 古月”(扩大化)
KUSO:恶搞的意思。但是也可以用来发表感叹,在动画中常常能听到男主角说这个词,翻译常常是“可恶~!”“***!”
874:动词……论坛上疯狂批判的行为,一般如果你会被874的话肯定是触犯了某位OTAKU高手或者精神病患者,建议先和这种论坛保持距离,提高自己的实力以后再去或者干脆不要去了。
素人/幼齿:就是看动漫有些年头(2-3年)自己有点开窍了但其实还懂的很少的人。不算贬义词。
达人:看动漫不惜一切代价,总之实力很强的那种。
*动漫体裁:
SF=SCIENCE FICTION 科幻机械类的作品,如EVA
*动漫作品的缩写:
动漫发烧友之间常常用缩写代表自己熟悉的作品,缩写通常是能理解的,但也有些对于新人来说不是很熟悉,在此略举一二,以后逐渐补充。
FF:大家最熟悉的大概就是FF(FINAL FANTASY)系列了,FF系列本来是SQUARE公司的一个著名游戏,因为非常受欢迎所以有很多周边,比如游戏动画,OVA,电影等。但是
最近使用FF的缩写则需要辨别一下了,因为《黑客帝国》系列也出品了一部动画短片名叫FINAL FLIGHT OF THE OSIRIS(欧西里司最后的飞翔),缩写同样是FF。该片导演和《FINAL FANTASY》的电影版是同一个人(安迪*琼斯),怪不得连名字都一样了。
M0=MACROSS ZERO(ZERO 是零的意思,所以用“0”表示)
ROD系列:目前出品的有两个作品,一个是READ OR DIE(OVA),中文名为“死亡的思考”;另一个是正在制作放映中的READ OR DREAM(TV),目前过内还没有D版。它们的缩写均为ROD
*OVA
首先解释一下什么是OVA?
OVA=ORIGINAL VIDEO ANIMATION=原创动画录映带
OVA在日本动画历史里占了一个非常重要的地位,在各种动画资讯志让经常会看见她的踪影。能够作为OVA的作品在首次推出时必定是未曾在电视或戏院上映过,才能称作为OVA。当哪些在电视或戏院上映过的作品再推出的录映带/LD/VCD等等就不能称作OVA了。而OVA中的"V"亦泛指所有映带/LD/VCD/DVD媒体,并不是单单当作录映带。
*剧场版
什么是剧场版(动画)
初公开是为了在电影院播放而制作的动画称之。这类作品的制作成本与投资、人力都高於OVA与电视版动画,画工也极尽可能的豪华,不论在动作的流畅度、使用的分色数等,可以明显地看出与前两者的差别。通常一部剧场版动画是90分钟,不过没有一定,歧异度很大。
现今,只要的受欢迎的TV动画,通常都会推出相应的剧场版,但剧场版无论是故事还是人物,通常都会和原TV版有所差异。例如《少女革命》和《超时空要塞》都的剧场版都只保留了原作故事和人物的主线。
*原画
原画是把画面中人物的动作之起始与终点画面或是静画等,以线条稿的模式画在纸上。阴影与分色的层次线也在此步骤时画进去。因此有人译作"Key-Animetor"或"Illustrator"(较少用)。
*动画
将原画中的每个动作,依照分镜表指定的时间间隔,将中间连贯的每张画面画在纸上的工作。最后将这些线条稿影印到赛璐珞片上,就可以进行上色的作业。也有人译成"Assistant
Animetor", "Inbetweener"。
*作画监督
作画监督(Animetion Director, Key Animetion Supervisor)的工作是什么?
修正原画、动画之成品,看看人物的脸型是否符合人物设定,动作是否流畅等等。必要的时候必须能重新作画,因此必须是资深的原画家及动画家才能胜任。
*色指定
指定用色的工作称之,名称不一,有时也叫"色彩设定",英文则有Color Setting, Color Styling, Color Designer, Color Coordinator, Color Key...。除了指定"衣服要红色、裤子要黑色"这种事之外,更重要的是指定赛璐珞画上色时所需的阴影、层次色,是用XXX号的颜料。
*仕上
在日文的原意是完成、完稿的意思,中文就是上色,英文为Painting, Finishing。根据每一个区块标记的颜料号码,在赛璐珞片的反面进行涂色的工作。
*音响监督
音响监督 (Audio Director)的工作是什么?
负责插入配乐的安排、效果音的准备、配音录制、混音工程的监督等等。
*制作人
制作人(Producer)的工作
制作人的工作,主要是规划制作进度表,安排每日每天的制作进度,寻找制作群/制作公司,对外争取出资者,同时必须和执行制作共同作业,以确保企划的每个元件都能按时并正确无误地组合在一块儿。
*GK模型
"GK"的全文是 Garage Kit,原意是"车库组件",因为西方人惯将车库作为工作房,而GK模型就是在这种地方诞生了。
最初的GK模型只是一些玩家们自行创作的作品,造型细致度是因人而异,通常都是ONLY ONE,全世界只此一个。制作的素材(也就是原料)没有一定,黏土、石膏、木板、金属都可以拿来做,因此自制或自己少量生产的模型才叫GK。 之后因为某些特殊成品很讨人喜欢,也就有了把它当成商品来出售的念头。卖著卖著,突然有天有两个家伙,他们同时看上了一件作品,有人就开始动脑筋复制GK模型,用翻模的方式!当时可能是使用石膏之类的材料来当作模版来复制,但是石膏不易耐久,可能翻制个一两次之后就面目全非啦。现在则是使用矽胶 (SILICONE)来作为翻模用的模版材料,不但具有极佳的弹性,在耐用度上也比石膏强多了,不过还是有其翻制数量上的限制。 基本上,只要不是射出成形而可大量生产的塑胶模型都被叫GK,大致有实心树脂,空心软胶,white metal (低熔点,软软的铅锡合金)数种,题材则多为动漫画或电影人物,在 HGA陈列的GK以实心树脂(最早的来源竟然是工业废料)的动漫画人物为主。(HB、Bastet (蓟)、THEO)
*监督
"监督"其实是日文的写法,英文是Director,即中文常见的导演。日本ANIME制作的导演是决定整部作品气氛风格的关键,掌管故事进行的步调、气氛转折等等。即使是相同的人物设定、相同的画风与制作群,也会因导演的不同而有截然不同的风格。
*角色设定
负责设计登场角色的人物造型、衣装样式的叫"人物设定",其工作不但是要让后续的作画者知道要画的人长得什么模样,还必须告诉他们这个角色的脸部特徵,眼神,表情等等,而且也要设计出由数个不同角度观看同一位角色的脸,以及不同於一般漫画、线条封闭的浏海。而负责登场的机械人、车辆、武器之设计的就是"机械设定",除了画出机械的造型以外,可能出现的细部结构、运动方式、可开启处等等也必须标明。设计稿除了特别指明以外,一般都是不上阴影的清洁线条稿。
*SINARIO
即英文的scenario,脚本的意思。把故事剧情以纯文字写出,包括场景、地点、背景音效、人物对白、人物动作等。
*分镜表
英文是Continuty Script,中文则是叫做"分镜表"的东西。这步作业是实际将纸上的东西转换成将来呈现画面的第一步,画分镜表的依照脚本的指示,在脑中转成画面然后画在纸上。画分镜表的目的就是把动画中的连续动作用分解成以1个Cut(1个分镜)单位,旁边标上本画面的运镜方式、对白、特效等等。最重要的每个Cut所经过的时间、张数等,也都会写在分镜表的最右边。
*Layout
"Layout"算是比较少见的工作,在工作性质上接近中文的"构图",只有在一些剧场版作品可能采用,例如设计多层次背景,令每层背景移动速度不同,就能表现出逼真写实的远近距离感。而画Layout的人必须在脑海里意识到摄影机的存在,从摄影机的观点去看场景里的一草一木,然后将这些画面详细地画下来。
会有这个工作,主要是弥补不大会画图的导演所画的分镜表,将杂乱简略的画面仔细的呈现出来,作为日后原画、动画、背景、色指定等等的依据。在押井守的作品,例如机动警察剧场版、机动警察剧场版2、攻壳机动队等等,都是运用大量Layout的实例,而特色就是"用2D的作画也能精确表现3D的视觉效果"。
*演出
日文"演出"一职,是在日本动画制作中特有的职称。简单说,他是辅佐导演的人,在TV系列和在OVA版、MOVIE版中扮演的角色也不大相同。
在TV系列中,因为导演太忙,不大可能全程兼顾每一集,所以各集的"演出"就相当於该集的"专属导演",顺著(总)导演的意图,全程掌控该集的制作。而在OVA、Movie中,"演出"这个职位就比较像"助监督"(副导演),了解导演的意图,协助处理演出工作的细节("演出工作"就是"把剧本文字转化为镜头画面"的过程, 有点像西方电影或舞台剧所谓的"场面调度")。他的工作相当近似於监督,一定要相当熟悉动画语言的人来担任,但不一定要很会画图 (正如导演也不一定要很会画图一样 .....)所以,有人译为"Co-director". 也有人译为"Assistant Director"或 "Executive Director"。
Golang 和java/c不同,Go在不同类型的变量之间赋值时需要显式转换。也就是说Golang中数据类型不能自动转换。
基本语法
表达式T(v))将值v 转换为类型T
T∶就是数据类型,比如int32,int64,float32等等
v∶ 就是需要转换的变量
var i int = 100
var b float64 = float64(i)
var c int64 = int64(b)
fmt.Printf("b=%f,c=%d",b,c)
b=100.000000,c=100
登录后复制
细节说明
1)Go中,数据类型的转换可以是从表示范围小-表示范围大,也可以范围大一范围小
2) 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!
3) 在转换中,比如将 int64 转成int8,编译时不会报错,只是转换的结果是按溢出处理,和
我们希望的结果不一样。(在转换的时候需要注意范围)
var a int64 = 10000000
var b int8 = int8(a)
fmt.Printf("%d",b)
-128
登录后复制
可以看到在转换的时候,一定要保证转换大数据要是对方可以接受的范围。
n1类型是int32,那么➕20整个就是int32类型,可是n2是int64,这样就会编译错误。
题二n4是12 + 127溢出超过了范围,运行的时候按照溢出处理。n3是直接编译不通过,128已经超过了int8类型的范围
基本数据类型和string的转换
字符串格式化
Go语言用于控制文本输出常用的标准库是fmt
fmt中主要用于输出的函数有:
Print: 输出到控制台,不接受任何格式化操作
Println: 输出到控制台并换行
Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出别的类型)
Sprintf:格式化并返回一个字符串而不带任何输出
Fprintf:来格式化并输出到 io.Writers 而不是 os.Stdout
整数类型
格 式 描 述
%b 整型以二进制方式显示
%o 整型以八进制方式显示
%d 整型以十进制方式显示
%x 整型以十六进制方式显示
%X 整型以十六进制、字母大写方式显示
%c 相应Unicode码点所表示的字符
%U Unicode 字符, Unicode格式:123,等同于 "U+007B"
浮点数
格 式 描 述
%e 科学计数法,例如 -1234.456e+78
%E 科学计数法,例如 -1234.456E+78
%f 有小数点而无指数,例如 123.456
%g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
%G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出
布尔
格 式 描 述
%t true 或 false
字符串
格 式 描 述
%s 字符串或切片的无解译字节
%q 双引号围绕的字符串,由Go语法安全地转义
%x 十六进制,小写字母,每字节两个字符
%X 十六进制,大写字母,每字节两个字符
指针
格 式 描 述
%p 十六进制表示,前缀 0x
var num1 int64 = 99
var num2 float64 = 23.99
var b bool = true
var mychar byte = 'h'
str1 := fmt.Sprintf("%d",num1)
str2 := fmt.Sprintf("%f",num2)
bool1 := fmt.Sprintf("%t",b)
mychar1 := fmt.Sprintf("%c",mychar)
fmt.Printf("%T,%T,%T,str1=%v,str2=%v,bool1=%v,mychar1=%v",str1,bool1,str2,str1,str2,bool1,mychar1)
string,string,string,string,str1=99,str2=23.990000,bool1=true,mychar1=h
登录后复制

使用strconv包 基本类型 - string类型
num1 := 99
str1 := strconv.FormatInt(int64(num1),10)
fmt.Printf("%T,%v",str1,str1)
num2 := 99.99
str2 := strconv.FormatFloat(num2,'f',10,64)
fmt.Printf("%T,%v\n",str2,str2)
登录后复制
strconv包提供了字符串与简单数据类型之间的类型转换功能,可以将简单类型转换为字符串,也可以将字符串转换为其它简单类型
string和int转换
int转string的方法是: Itoa()
str := strconv.Itoa(100)
fmt.Printf("type %v, value: %s\n", reflect.TypeOf(str), str)
登录后复制
2.string转int的方法是:
i, err := strconv.Atoi("100")
fmt.Printf("type %v, value: %d, err: %v\n", reflect.TypeOf(i), i, err)
登录后复制
并不是所有string都能转化为int, 所以可能会报错:
i, err := strconv.Atoi("100x")
fmt.Printf("type %v, value: %d, err: %v\n", reflect.TypeOf(i), i, err)
登录后复制
使用strconv包 string转其他类型
strconv包提供的Parse类函数用于将字符串转化为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint() 由于字符串转换为其它类型可能会失败,所以这些函数都有两个返回值,第一个返回值保存转换后的值,第二个返回值判断是否转换成功。
1.转bool
b, err := strconv.ParseBool("true")
fmt.Println(b, err)
登录后复制
2.转float
f1, err := strconv.ParseFloat("3.1", 32)
fmt.Println(f1, err)
f2, err := strconv.ParseFloat("3.1", 64)
fmt.Println(f2, err)
登录后复制
由于浮点数的小数部分 并不是所有小数都能在计算机中精确的表示, 这就造成了浮点数精度问题, 比如下面
var n float64 = 0
for i := 0; i 1000; i++ {
n += .01
}
fmt.Println(n)
关于浮点数精度问题: c计算机不都是0101吗,你有想过计算机是怎么表示的小数吗, 简单理解就是:
将其整数部分与小树部分分开, 比如5.25
对于整数部分 5 ,我们使用"不断除以2取余数"的方法,得到 101
对于小数部分 .25 ,我们使用"不断乘以2取整数"的方法,得到 .01
听说有一个包可以解决这个问题: github.com/shopspring/decimal
3.转int
func ParseInt(s string, base int, bitSize int) (i int64, err error)
base: 进制,有效值为0、2-36。当base=0的时候,表示根据string的前缀来判断以什么进制去解析:0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析
bitSize: 多少位,有效值为0、8、16、32、64。当bitSize=0的时候,表示转换为int或uint类型。例如bitSize=8表示转换后的值的类型为int8或uint8
fmt.Println(bInt8(-1)) // 0000 0001(原码) - 1111 1110(反码) - 1111 1111
// Parse 二进制字符串
i, err := strconv.ParseInt("11111111", 2, 16)
fmt.Println(i, err)
// Parse 十进制字符串
i, err = strconv.ParseInt("255", 10, 16)
fmt.Println(i, err)
// Parse 十六进制字符串
i, err = strconv.ParseInt("4E2D", 16, 16)
fmt.Println(i, err)
4.转uint
func ParseUint(s string, base int, bitSize int) (uint64, error)
用法和转int一样, 只是转换后的数据类型是uint64
u, err := strconv.ParseUint("11111111", 2, 16)
fmt.Println(u, err)
u, err = strconv.ParseUint("255", 10, 16)
fmt.Println(u, err)
u, err = strconv.ParseUint("4E2D", 16, 16)
fmt.Println(u, err)
其他类型转string
将给定类型格式化为string类型:FormatBool()、FormatFloat()、FormatInt()、FormatUint()。
fmt.Println(strconv.FormatBool(true))
// 问题又来了
fmt.Println(strconv.FormatInt(255, 2))
fmt.Println(strconv.FormatInt(255, 10))
fmt.Println(strconv.FormatInt(255, 16))
fmt.Println(strconv.FormatUint(255, 2))
fmt.Println(strconv.FormatUint(255, 10))
fmt.Println(strconv.FormatUint(255, 16))
fmt.Println(strconv.FormatFloat(3.1415, 'E', -1, 64))
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。
fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很大时用'E'格式,否则'f'格式)。
prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。
编程常用语言有:1、PHP语言,是一种通用开源脚本语言;2、C语言,一门面向过程的、抽象化的通用程序设计语言;3、JAVA语言,一种可以撰写跨平台应用软件的面向对象的程序设计语言;4、Go语言,是开源编程语言;5、Python,一种跨平台计算机程序设计语言等。 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。 C语言能以简易的方式编译、处理低级存储器。 C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言
一、Java最流行
与一年前一样,Java仍然是最流行的编程语言。据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首。许多知名公司使用Java来开发软件和应用程序,所以如果你碰巧使用Java,绝对不必为找工作而苦恼。Java受欢迎的主要原因是它拥有可移植性、可扩展性和庞大的用户社区。
二、经典的C语言
作为最古老的编程语言之一,C依然高居榜首,这归功于其可移植性以及微软、Oracle和苹果等科技巨头采用它。它与几乎所有系统兼容,很适合操作系统和嵌入式系统。
由于运行时环境相对小巧,因此C是保持这种系统精简的完美选择。强烈建议初学者学C,它实际上是编程语言的通用语言,已催生出了同样很受欢迎的衍生语言,比如C++和C#。
三、C ++继续占主导地位
这种面向对象编程语言在20世纪80年代开发而成,现在仍应用于从桌面Web应用程序到服务器基础设施的众多系统。由于灵活性、高性能以及可用于多种环境,C ++依然很吃香。以C++为业的工作通常需要开发面向性能密集型任务的桌面应用程序。掌握C++可以更深入地了解编程语言,帮助获得低级内存处理方面的技能。
四、Python:不断上升
过去15年来,Python的受欢迎程度稳步上升。过去这几年,它一直能够跻身TIOBE指数前5名的位置。作为如今人工智能、机器学习、大数据和机器人等一些最有前途的技术背后的主要语言,Python近年来积累了庞大的粉丝群。你会惊讶地发现学习Python很容易,这就是为什么许多经验丰富的开发人员选择Python作为第二或第三语言的原因。
五、C#:游戏开发人员的宠儿
C#是一种现代的面向对象编程语言,由微软开发,与当时商业软件开发人员广泛使用的Java相抗衡。它专为在微软平台上开发应用程序而设计,需要Windows上的.NET框架才能工作。与前一年一样,C#保持稳定的位置,名次没有重大变化。可以使用C#开发几乎所有应用程序,但它尤其擅长于Windows桌面应用程序和游戏开发。
六、Visual Basic .NET
Visual Basic .NET与去年一样,在指数中继续保持第六位。它是微软的OOP语言之一,结合了基于.NET框架的类和运行时环境的强大功能。它自VB6衍生而来,擅长开发GUI应用程序,为程序员简化了任务,并提高生产力。对于程序员来说,除了Web服务和Web开发外,还为针对Windows平台开发桌面应用程序提供了一种快速简单的方法。
七、用于Web开发的PHP
据TIOBE显示,PHP在TIOBE最受欢迎的编程语言排行榜中位居第七,取代JavaScript成为更受欢迎的脚本语言。 PHP主要用在服务器端上用于Web开发,约占网站总数的80%。
Facebook最初使用的就是PHP,PHP在WordPress内容管理系统中扮演的角色让它很受欢迎。PHP提供了几个框架,比如Laravel和Drupal,帮助开发人员更快地构建应用程序,拥有更高的可扩展性和可靠性。因此,如果你在找Web开发方面的职位,PHP是不错的选择。
八、JavaScript必不可少
今年JavaScript的使用量有所下降,名次比去年有所下滑。但是现在所有软件开发人员都以某种方式使用JavaScript。与HTML和CSS一起使用,JavaScript对于前端Web开发来说必不可少,以便创建交互式网页,并向用户动态显示内容。
超过90%的网站使用这种语言,它也是初学者开始上手的最友好的编程语言之一。所以,如果你掌握JavaScript,根本不缺机会。然而,你需要学习其他支持性的语言和框架,才能成为主攻桌面和移动应用程序或游戏开发的专业的前端开发人员。
九、SQL
SQL夺得第九名,实现了显著的增长,毕竟去年它未能跻身于TIOBE指数20大编程语言。尽管存在其他数据库技术,但用于管理数据库的这种标准查询语言在过去四十年一直处于主导地位。
原因在于它具有简单性、可靠性、无处不在,以及对保持这种开源语言活力大有帮助的活跃社区。与其他语言相比,初学者通常更容易学习SQL;就职业发展而言,像数据分析员这类高薪职位要求SQL非懂不可。
十、GO编程语言
Go是谷歌公司推出的一款相对较新的语言,对于web服务器开发、网络开发以及命令行程序开发来说,它是又一个比较优秀的选择