好记性不如烂笔头~
坚持是世界上最难的小事
1.import包前的下划线
只能引用指定包里面的init函数(所谓的init函数就是初始化调用。import的包里,
如果写了init函数,在被导入的时候,会执行该方法),调用该包的其它函数会报错。如下图所示。偷懒不贴代码,直接上图,鹅鹅鹅饿鹅鹅鹅鹅~
2.interface的使用
入门佳文,可以先看下《Go语言中你不知道的Interface详解》转载
概念:
(1)如果一个结构体绑定的方法包含接口的所有方法,即认为实现了该接口
(2)将对象赋值给接口时,会发生拷贝,而接口的存储是指向这个复制的指针,复制的无法修改原来状态,也无法获取指针
package myinterface
//定义接口
type INewsService interface {
//获取资讯的评论数
GetNewsCommentNum() int
}
//接口实现类:包含了接口定义的方法-同名同参同返回值
type NewsService struct {
//变量名首字母记得要大写哦,NewsService的对象才可以引用
//图片域名前缀
ImagePrefix string
}
//属于NewsService里的方法
func (newsService NewsService) GetNewsCommentNum() int {
return 1
}
//没有和接口绑定
//内部方法(方法名的首字母需大写,对象才可引用)
//成员变量进行赋值
func SetImagePrefix(newsPointer *NewsService, prefix string) {
newsPointer.ImagePrefix = prefix
}
func main() {
//自动推导类型的是struct类型
newsServceStruct := myinterface.NewsService{"http://img.xxx.com/"}
fmt.Println("自动推导可以引用内部变量:", newsServceStruct.ImagePrefix)
newsServceStruct.GetNewsCommentNum()
//接口的存储是拷贝后对象(只拷贝接口定义的那些方法)的指针
var newsServiceInterface myinterface.INewsService = myinterface.NewsService{}
fmt.Println("接口类型无法引用内部变量:%s", newsServiceInterface.ImagePrefix) //此处编译错
newsServiceInterface.GetNewsCommentNum()
//直接取对象的地址 ===> 指针 ,只能引用到NewsService的变量,方法
newsServicePointer := &myinterface.NewsService{}
fmt.Println("指针可以引用内部变量:%s", newsServicePointer.ImagePrefix)
newsServicePointer.GetNewsCommentNum()
newsServicePointer.SetImagePrefix(&newsServceStruct, "http://")//此处编译错
//类似java里的静态方法
myinterface.SetImagePrefix(&newsServceStruct, "http://")
fmt.Println(newsServceStruct.ImagePrefix)
//与接口绑定的方法
myinterface.GetNewsCommentNum()//此处编译错
}
3.string和byte[]
string与[]byte的直接转换是通过底层数据copy实现的
//如果是多个JSONArray(java里)类型的,可以最外层用`(键盘Esc下的键)包裹起来
var jsonByte []byte = []byte(`[{"Id":1},{"Id":2}]`)
var a = []byte("hello world")
var b = string(a)
4.打印结构体
package main
import "fmt"
type info struct {
name string
id int
}
func main() {
v := info{"Nan", 33}
fmt.Printf("%v\n", v)
fmt.Printf("%+v\n", v)
}
-------我是可爱的分割线------
输出结果:
{Nan 33}
{name:Nan id:33}
多个+号,可以打印出属性名
3.encoding/json的使用
。。。。。