You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: utils.go
    path of file: ./repos/azure-sdk-for-go/sdk/messaging/azservicebus/internal/stress/shared
    
    the code of the file until where you have to start completion: // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package shared

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus"
	"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/admin"
	"github.com/joho/godotenv"
)

type TestContext struct {
	*StressContext
	Client *azservicebus.Client
}

func MustGenerateMe
    
func MustCreateSubscriptions(sc *StressContext, topicName string, subscriptionNames []string, options *MustCreateSubscriptionsOptions) func() {
	log.Printf("[BEGIN] Creating topic %s", topicName)
	defer log.Printf("[END] Creating topic %s", topicName)

	ac, err := admin.NewClientFromConnectionString(sc.ConnectionString, nil)
	sc.PanicOnError("Failed to create a topic manager", err)

	var topicOpts *admin.CreateTopicOptions

	if options != nil && options.Topic != nil {
		topicOpts = options.Topic
	}

	_, err = ac.CreateTopic(context.Background(), topicName, topicOpts)
	sc.PanicOnError("Failed to create topic", err)

	for _, name := range subscriptionNames {
		var subOpts admin.CreateSubscriptionOptions

		if options != nil && options.Subscription != nil {
			subOpts = *options.Subscription
		}
		_, err := ac.CreateSubscription(context.Background(), topicName, name, &subOpts)
		sc.PanicOnError("Failed to create subscription manager", err)
	}

	return func() {
		_, err := ac.DeleteTopic(context.Background(), topicName, nil)
		sc.PanicOnError(fmt.Sprintf("Failed to delete topic %s", topicName), err)
	}
}