go指针逃逸对结构体元素集合法(增法)

例子1
package main

import (
"awesomeProject/logger"
"fmt"
"github.com/opencontainers/runtime-tools/filepath"
"os"
)

type Goods struct {
ID uint
MonTs string
}

func Mkfile() {
filepaht := filepath.Join(os.TempDir(), "nginx")

if _, err := os.Stat(filepaht); os.IsNotExist(err) {
err = os.MkdirAll(filepaht, 0644)
if err != nil {
logger.DefaultLogger.Errorf("%v", err)
}

}
}
func NewGoods(id uint) *Goods {
return &Goods{ID: id}

}
func (g *Goods) SetMontsAdd(m string) *Goods {
g.MonTs = m
return g

}

func main() {

g := NewGoods(100).SetMontsAdd("TE")

fmt.Println(g) //{100 TE}

}


例子2
package main

import (
"awesomeProject/logger"
"fmt"
"github.com/opencontainers/runtime-tools/filepath"
"os"
)

type Goods struct {
ID uint
MonTs string
}

func Mkfile() {
filepaht := filepath.Join(os.TempDir(), "nginx")

if _, err := os.Stat(filepaht); os.IsNotExist(err) {
err = os.MkdirAll(filepaht, 0644)
if err != nil {
logger.DefaultLogger.Errorf("%v", err)
}

}
}
func (g *Goods) SetId(id uint) *Goods {
g.ID = id
return g

}
func (g *Goods) SetMonts(m string) *Goods {
g.MonTs = m
fmt.Printf("%T\n", g)
return g

}

func main() {

var g Goods //或者var g = &Goods{}

g.SetId(100).SetMonts("test")
fmt.Println(g) //{100 test}

}


例子3
package main

import (
"awesomeProject/logger"
"fmt"
"github.com/opencontainers/runtime-tools/filepath"
"os"
)

type Goods struct {
ID uint
MonTs string
}

func Mkfile() {
filepaht := filepath.Join(os.TempDir(), "nginx")

if _, err := os.Stat(filepaht); os.IsNotExist(err) {
err = os.MkdirAll(filepaht, 0644)
if err != nil {
logger.DefaultLogger.Errorf("%v", err)
}

}
}
func (g *Goods) SetId(id uint) uint {
g.ID = id
return g.ID

}
func (g *Goods) SetMonts(m string) string {
g.MonTs = m

return g.MonTs

}

func main() {

var g *Goods //(改为var g Goods 或者var g = &Goods{})
   g.SetId(100)
g.SetMonts("test")
fmt.Println(g)

} // 用
var g *Goods 报错 runtime error: invalid memory address or nil pointer dereference
posted @   技术颜良  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2021-12-04 日志管理系统GRAYLOG的集群部署
2021-12-04 vmware DRS
2021-12-04 vmware vcsa安装
2020-12-04 find文件获得绝对文件路径绝对值
2020-12-04 Tomcat和JVM的性能调优总结
2019-12-04 istio 简介
2018-12-04 二进制手动部署kubernetes 1.10.10
点击右上角即可分享
微信分享提示